UNPKG

7.71 kBJavaScriptView Raw
1'use strict';
2
3var Path = require('path');
4var Should = require('should');
5var IFNode = require('../');
6
7describe('Application', function() {
8 describe('app = new Application', function() {
9 it('should throw error for wrong alias type', function() {
10 (function() {
11 IFNode({
12 alias: null
13 });
14 }).should.throw();
15 });
16
17 it('without parameters', function() {
18 var app = IFNode();
19 var app1 = IFNode();
20
21 app.should.be.an.Object();
22 app.should.be.equal(app1);
23 });
24
25 it('with parameters', function() {
26 var application_path = Path.resolve(__dirname, '../examples/config');
27 var application_alias = 'application';
28
29 var app = IFNode({
30 project_folder: application_path,
31 alias: application_alias
32 });
33
34 app.project_folder.should.be.equal(application_path);
35 app.project_folder.should.be.equal(app.projectFolder);
36
37 app.alias.should.be.equal(application_alias);
38 });
39
40 it('should few instances', function() {
41 var app1 = IFNode({
42 alias: 'app1'
43 });
44 var app2 = IFNode({
45 alias: 'app2'
46 });
47
48 IFNode('app1').should.be.equal(app1);
49 IFNode('app2').should.be.equal(app2);
50 });
51 });
52
53 describe('should has base properties', function() {
54 var app = IFNode({
55 alias: 'app-properties-check'
56 });
57
58 app.load();
59
60 app.config.should.be.an.Object();
61 app.server.should.be.an.Object();
62 app.listener.should.be.a.Function();
63
64 app.components.should.be.an.Object();
65 app.models.should.be.an.Object();
66 app.controllers.should.be.an.Object();
67
68 app.id.should.be.a.String();
69 app.alias.should.be.a.String();
70 app.project_folder.should.be.a.String();
71 app.projectFolder.should.be.a.String();
72 app.backend_folder.should.be.a.String();
73 app.backendFolder.should.be.a.String();
74 });
75
76 describe('app.require(id: string)', function() {
77 var app = require('../examples/extensions/app');
78
79 app.require('protected/extensions/a').should.have.property('value', 'a');
80 app.require('protected/extensions/a').should.have.property('value', 'a'); // get from module's cache
81 app.require('./protected/extensions/a/b').should.have.property('value', 'a/b');
82 app.require('app').should.be.equal(app);
83 app.require('./../extensions/app').should.be.equal(app);
84 });
85
86 describe('app.register(module: string|Extension|Array<string|Extension>)', function() {
87 it('shouldn\'t load empty', function() {
88 var app = IFNode();
89
90 (function() {
91 app.register();
92 }).should.throw();
93 });
94
95 it('shouldn\'t load non-exists plugin', function() {
96 var app = IFNode();
97
98 (function() {
99 app.register('non-exists-plugin');
100 }).should.throw();
101 });
102
103 it('load by extension name', function(done) {
104 var app = IFNode({
105 project_folder: Path.resolve(__dirname, '../examples/plugins')
106 });
107
108 app.register('ifnode-plugins-internal');
109 done();
110 });
111
112 it('load by external name', function(done) {
113 var app = IFNode({
114 project_folder: Path.resolve(__dirname, '../examples/plugins')
115 });
116 var ifnode_plugin_external = Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external');
117
118 app.register(ifnode_plugin_external);
119 done();
120 });
121
122 it('load by module', function(done) {
123 var app = IFNode({
124 project_folder: Path.resolve(__dirname, '../examples/plugins')
125 });
126 var ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
127
128 app.register(ifnode_plugin_external);
129 done();
130 });
131
132 it('load by array', function(done) {
133 var app = IFNode({
134 project_folder: Path.resolve(__dirname, '../examples/plugins')
135 }),
136 ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
137
138 app.register([
139 'ifnode-plugins-internal',
140 ifnode_plugin_external
141 ]);
142 done();
143 });
144
145 it('load schema, controller, component and mixed plugins', function() {
146 var app = IFNode({
147 project_folder: Path.resolve(__dirname, '../examples/plugins')
148 });
149
150 var internal_schema = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-schema'));
151 var internal_component = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-component'));
152 var internal_controller = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-controller'));
153 var external_mixed_module_path = Path.resolve(__dirname, '../examples/plugins/node_modules/external-mixed');
154
155 app.register([
156 'internal-schema',
157 'internal-component',
158 'internal-controller',
159 external_mixed_module_path
160 ]);
161
162 app.load();
163
164 var modules = app._modules;
165
166 modules.should.containEql(internal_schema);
167 modules.should.containEql(internal_component);
168 modules.should.containEql(internal_controller);
169 modules.should.containEql(require(external_mixed_module_path));
170 });
171 });
172
173 describe('app.load()', function() {
174 var app = IFNode({
175 alias: 'app-load-test'
176 });
177
178 Should.equal(Object.keys(app.components).length, 0);
179 Should.equal(Object.keys(app.models).length, 0);
180 Should.equal(Object.keys(app.controllers).length, 0);
181
182 app.load();
183
184 app.components.should.be.an.Object();
185 app.models.should.be.an.Object();
186 app.controllers.should.be.an.Object();
187 });
188
189 describe('app.run(callback?: function)', function() {
190 it('without callback', function(done) {
191 var app = IFNode({
192 alias: 'server-run-wt-callback'
193 });
194
195 app.run();
196
197 /**
198 * setTimeout for node.js 0.10.x compatibility
199 */
200 setTimeout(function() {
201 app.down();
202 done();
203 }, 10);
204 });
205
206 it('with callback', function(done) {
207 var app = IFNode({
208 alias: 'server-run-with-callback'
209 });
210
211 app.run(function(config) {
212 this.should.be.equal(app);
213 this.config.should.be.equal(config);
214
215 app.down();
216 done();
217 });
218 });
219 });
220
221 describe('app.down(callback?: function)', function() {
222 it('without callback', function(done) {
223 var app = IFNode();
224
225 app.run(function() {
226 app.down();
227 done();
228 });
229 });
230
231 it('with callback', function(done) {
232 var app = IFNode();
233
234 app.run(function() {
235 app.down(function() {
236 done();
237 });
238 });
239 });
240 });
241});